package com.wing.platform.order.model.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.enums.IEnum;
import com.wing.mybatis.common.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.time.LocalDate;

/**
 * 销售代理商经销记录
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class Agent extends BaseEntity<Agent> implements Serializable {

    private static final long serialVersionUID = 1L;

    public enum SourceId implements IEnum<Integer> {

        /**
        * 平台后台录入
        */
        admin(0,"平台后台录入"),
        /**
        * 渠道端后台申请
        */
        platform(1,"渠道端后台录入"),
        /**
        * 渠道官网申请
        */
        spguanwang(2,"渠道官网申请"),
        /**
         * 平台官网申请
         */
        guanwang(3,"平台官网申请");

        private int code;
        private String desc;

        SourceId(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum Type implements IEnum<Integer> {

        /**
        * 签约渠道
        */
        on(0,"签约渠道"),
        /**
        * 意向渠道
        */
        having(1,"意向渠道");

        private int code;
        private String desc;

        Type(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum Status implements IEnum<Integer> {

        /**
        * 待尽调
        */
        wait_due(0,"待尽调"),
        /**
        * 待审核
        */
        wait_check(1,"待审核"),
        /**
         * 待签约
         */
        wait_qianyue(2,"待签约"),
        /**
         * 已签约
         */
        complet(3,"已签约");

        private int code;
        private String desc;

        Status(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum Validity implements IEnum<Integer> {

        /**
         * 有效
         */
        enable(0,"有效"),
        /**
         * 无效
         */
        disable(1,"无效");

        private int code;
        private String desc;

        Validity(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 代理商名称
     */
    private String name;


    /**
     * 业务负责省id
     */
    private Long bussinessProvinceId;

    /**
     * 业务负责市id
     */
    private Long bussinessCityId;

    /**
     * 业务负责区县id
     */
    private Long bussinessAreaId;

    /**
     * 区县名称
     */
    @TableField(exist = false)
    private String bussinessAreaName;


    /**
     * 代理商来源
     */
    private SourceId sourceId;

    /**
    * 代理商来源描述
    */
    @TableField(exist = false)
    private String sourceIdDesc;

    public String getSourceIdDesc() {
        return sourceId == null ? null : sourceId.getDesc();
    }

    /**
     * 代理商类型
     */
    private Type type;

    /**
    * 代理商类型描述
    */
    @TableField(exist = false)
    private String typeDesc;

    public String getTypeDesc() {
        return type == null ? null : type.getDesc();
    }

    /**
     * 对接人
     */
    private String counterpart;

    /**
     * 代理商分类
     */
    private Long agentCategoryId;

    /**
     * 代理商状态
     */
    private Status status;

    /**
    * 代理商状态描述
    */
    @TableField(exist = false)
    private String statusDesc;

    public String getStatusDesc() {
        return status == null ? null : status.getDesc();
    }

    /**
     * 代理商有效性
     */
    private Validity validity;

    /**
     * 代理商有效性描述
     */
    @TableField(exist = false)
    private String validityDesc;

    public String getValidityDesc() {
        return validity == null ? null : validity.getDesc();
    }

    /**
     * 代理商分类名称
     */
    @TableField(exist = false)
    private String agentCategoryName;

    /**
     * 省份名称
     */
    @TableField(exist = false)
    private String bussinessProvinceName;

    /**
     * 地市名称
     */
    @TableField(exist = false)
    private String bussinessCityName;

    /**
     * 企业编号(自身企业编号)
     */
    private String enterpriseCode;

    /**
     * 企业名称(自身企业名称)
     */
    @TableField(exist = false)
    private String companyName;

    /**
     * 企业ID(自身企业ID)
     */
    @TableField(exist = false)
    private Long companyId;

    /**
     * 企业编号(所属企业编号)及上一级企业编号
     */
    private String parentEnterpriseCode;

    /**
     * 企业编号(所属企业编号)及上一级企业名称
     */
    @TableField(exist = false)
    private String parentEnterpriseName;

    /**
     * 所属行业ID
     */
    @TableField(exist = false)
    private Long industryId;

    /**
     * 所属行业名称
     */
    @TableField(exist = false)
    private String industryName;
    /**
     * 客户面向行业ID
     */
    @TableField(exist = false)
    private String clientIndustryId;
    /**
     * 客户面向行业名称
     */
    @TableField(exist = false)
    private String clientIndustryName;

    /**
     * 统一信用代码
     */
    @TableField(exist = false)
    private String creditCode;
    /**
     * 证件附件
     */
    @TableField(exist = false)
    private String credentials;
    /**
     * 企业照片
     */
    @TableField(exist = false)
    private String photo;

    /**
     * 跟进时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @TableField(exist = false)
    private LocalDate establishTime;
    /**
     * 企业登陆账号
     */
    @TableField(exist = false)
    private String channalNumbe;
    /**
     * 企业登录密码
     */
    @TableField(exist = false)
    private String channalPassword;
    /**
     * 密保邮箱
     */
    @TableField(exist = false)
    private String encryptedEmail;
    /**
     * 重复密码
     */
    @TableField(exist = false)
    private String channalResPassword;
    /**
     * 联系人
     */
    @TableField(exist = false)
    private String linkman;
    /**
     * 联系电话
     */
    @TableField(exist = false)
    private String contact;
    /**
     * 省
     */
    @TableField(exist = false)
    private Long provinceId;
    /**
     * 省名称
     */
    @TableField(exist = false)
    private String provinceName;

    /**
     * 市
     */
    @TableField(exist = false)
    private Long cityId;
    /**
     * 市名称
     */
    @TableField(exist = false)
    private String cityName;

    /**
     * 区
     */
    @TableField(exist = false)
    private Long areaId;
    /**
     * 区名称
     */
    @TableField(exist = false)
    private String areaName;

    /**
     * 详情地址
     */
    @TableField(exist = false)
    private String address;
    /**
     * 坐标信息
     */
    @TableField(exist = false)
    private String coordinateInformation;
    /**
     * 银行账号
     */
    @TableField(exist = false)
    private String bankAccount;
    /**
     * 开户行
     */
    @TableField(exist = false)
    private String bank;
    /**
     * 开户许可证
     */
    @TableField(exist = false)
    private String license;
    /**
     * 入驻上传证明
     */
    @TableField(exist = false)
    private String entryCertificate;
    /**
     * 法人姓名
     */
    @TableField(exist = false)
    private String legalPersonName;

    /**
     * 法人身份证
     */
    @TableField(exist = false)
    private String idCard;

    /**
     * 身份证正面证据照
     */
    @TableField(exist = false)
    private String idCardFront;

    /**
     * 身份证反面证据照
     */
    @TableField(exist = false)
    private String idCardReverse;
    /**
     * 签名
     */
    private String signImg;

    /**
     * 审核备注
     */
    private String auditRemark;

    /**
     * 开户人
     */
    @TableField(exist = false)
    private String accountName;

    /**
     * 代理商所属级别名称
     */
    @TableField(exist = false)
    private String levelName;
    /**
     * 代理商所属级别编号
     */
    private String levelCode;

    @TableField(exist = false)
    private String typeCode;

    @TableField(exist = false)
    private String typeName;

    /**
     * OEM渠道编码
     */
    private String oemEnterpriseCode;
}
